home *** CD-ROM | disk | FTP | other *** search
/ APDL Other Worlds / APDL Other Worlds Collection.iso / SF3000 / Extras / CBlibrary / c / NullPoll < prev    next >
Encoding:
Text File  |  2003-10-16  |  2.1 KB  |  72 lines

  1. /*
  2.  * CBLibrary - NullPoll
  3.  * Copyright (C) 2003  Chris Bazley
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Lesser General Public
  16.  * License along with this library; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  */
  19.  
  20. /*
  21.  * Keeps track of multiple operations that require null polls,
  22.  * updating the event mask when necessary.
  23.  */
  24.  
  25. /* ANSI library files */
  26. #include <assert.h>
  27.  
  28. /* RISC OS library files */
  29. #include "kernel.h"
  30. #include "wimp.h"
  31. #include "event.h"
  32.  
  33. /* My library files */
  34. #include "NullPoll.h"
  35.  
  36. extern _kernel_oserror shared_err_block;
  37. static int num_null_pollers = 0;
  38.  
  39. /* ----------------------------------------------------------------------- */
  40. /*                         Public functions                                */
  41.  
  42. void nullpoll_register(void)
  43. {
  44.   if(num_null_pollers == 0) {
  45.     /* We have first client - unmask null events */
  46.     unsigned int event_mask;
  47.     event_get_mask(&event_mask);
  48.     event_mask &= ~Wimp_Poll_NullMask;
  49.     event_set_mask(event_mask);
  50.   }
  51.   num_null_pollers++;
  52. }
  53.  
  54. /* ----------------------------------------------------------------------- */
  55.  
  56. void nullpoll_deregister(void)
  57. {
  58.   /* Can't deregister if there are no clients! */
  59.   assert(num_null_pollers >= 1);
  60.   if(num_null_pollers < 1)
  61.     return; /* bad deregistration */
  62.  
  63.   if(num_null_pollers == 1) {
  64.     /* We have run out of clients - mask null events */
  65.     unsigned int event_mask;
  66.     event_get_mask(&event_mask);
  67.     event_mask |= Wimp_Poll_NullMask;
  68.     event_set_mask(event_mask);
  69.   }
  70.   num_null_pollers--;
  71. }
  72.